iT邦幫忙

2023 iThome 鐵人賽

DAY 13
0
自我挑戰組

2023年度學習分享系列 第 13

新需求 取得圖片的公開網址

  • 分享至 

  • xImage
  •  

文章未來將更新於:
https://kevinyay945.com/golang-project-design/2023/new-feature-for-get-public-url/

這次,我們有個新需求,需要多一個api,可以透過get的request來取得之前上傳的圖片的公開網址
規格如下

  /v1/temp-link/{location}/{fileName}:
    get:
      summary: redirect to the public link
      description: redirect to the public link
      tags:
        - v1Asset
      operationId: v1RedirectToPublicLink
      parameters:
        - name: location
          in: path
          description: save location
          required: true
          schema:
            type: string
            enum:
              - "obsidian"
              - "blog"
            x-enum-varnames:
              - OBSIDIAN
              - BLOG
        - name: fileName
          in: path
          description: save location
          required: true
          schema:
            type: string
      responses:
        '302':
          description: public link
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'

因此,我們透過oapi-codegen產生相對應的golang的interface,我們再讓之前宣告的EchoServer去實做這次新增的api

func (e *EchoServer) V1RedirectToPublicLink(ctx echo.Context, location V1RedirectToPublicLinkParamsLocation, fileName string) error {  
//TODO implement me  
panic("implement me")  
}

但在這時候發現,我們開給application的fileStorer的功能只有

GetPreviewLink(file domain.CloudFile, location domain.CloudFileLocation) (link string, err error)

並沒有辦法透過string去取得public link的功能

因此,我們要另外開一個func,可以透過string來尋找link的功能

GetPreviewLinkByLocationAndFileName(location domain.CloudFileLocation, fileName string) (link string, err error)

此時意外發現,domain層內有一個可以用name產生file的func

GetCloudFileByName(name string) (file CloudFile, err error)

但此時又發現,在目前的規劃中,是沒辦法用僅用name就可以找到檔案的(因為每個檔案都會存在某一個資料夾中,所以需要一個location來存)

所以會需要將這個func多增加一個location的變數,並順手將名稱改成GetCloudFileByNameAndLocation

GetCloudFileByNameAndLocation(name string, location CloudFileLocation) (file CloudFile, err error)

中間還有一點修正,包含產生public的路徑的domain有修正,但總之整體邏輯和之前描述的差不多

最後完整的code在這邊
https://github.com/kevinyay945/2023_asset_management/tree/v0.4.0


上一篇
將上傳圖片的功能組裝起來(domain&application)
下一篇
番外篇 Goland(JetBrain) 好用功能
系列文
2023年度學習分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言